#!/bin/bash
# tätä skriptiä kutsutaan päätteessä esimerkiksi: <polku>TestaaOnkoReaaliluku <testattava luku>                                11.4.2011 petteriIII
# testin aluksi varmistetaan ettei luvussa ole välilyöntiä ja poistetaan luvun ensimmäiseltä paikalta mahdollinen etumerkki. 
# Jos etumerkin poistamisen jälkeen ei jää mitään niin luku ei ole reaaliluku. 
# Jos luku on pelkkä piste se ei ole reaaliluku 
# Luku on reaaliluku jos se tämän jälkeen täyttää jommankumman ehdosta:
# 1. se on etumerkitön kokonaisluku (=integer) .  
# 2. jos siinä on desimaalipiste niin pisteen kummallakin puolella olevan luvun täytyy olla etumerkitön kokonaisluku
# - Jos pisteen perässä oleva luku on tyhjä niin kyseessä on järjestysluku, ei kokonaisluku.


function TestaaOnkoLukuEtumerkitonInteger () {
local luku
luku=$1
[[ $luku = *[![:digit:]]* ]] && tulos="luku ei ole integer" || tulos="luku on integer"
echo $tulos
} 

function TestaaOnkoLukuEtumerkillinenInteger () {
local luku ensimmainenmerkki loputmerkit
luku=$1
ensimmainenmerkki=${luku:0:1}; [[ $ensimmainenmerkki = "[+-0123456789]" ]] && apu='' || apu="luku ei ole integer"
echo "ensimmäinen merkki:"$ensimmainenmerkki
loputmerkit=${luku:1}
[[ ${luku:1} = *[![:digit:]]* ]] && tulos="luku ei ole integer" || tulos="luku on integer"
echo $tulos
}  
 
[[ ! $1 ]] && echo 'tämä skripti kertoo onko sille syötetty parametri reaaliluku vai ei. Nyt ei parametria ole, lopetan' && sleep 6 && return
[[ $2 ]] && echo -n "luvussa on välilyönti, onkohan se tarkoitus? Mutta luku:"$1" "$2" ei ole reaaliluku" && return 
luku=$1 
[[ ${luku:(-1)} = "." ]] && tulos="luku ei ole integer" || tulos="luku on integer" 
LukuPilkunEdessa=${luku%.*}
PilkunPaikka=${#LukuPilkunEdessa}
echo "PilkunPaikka:"$PilkunPaikka
[[ $LukuPilkunEdessa = [+-] ]] && LukuPilkunEdessa=$LukuPilkunEdessa"0"
LukuPilkunPerassa=${luku:PilkunPaikka+1} # +1}
[[ ! $LukuPilkunEdessa ]] && LukuPilkunEdessa=0
#[[ ! $LukuPilkunPerassa ]] && LukuPilkunPerassa=0
echo "LukuPilkunEdessa:"$LukuPilkunEdessa"   LukuPilkunPerassä:"$LukuPilkunPerassa 
[[ $tulos = "luku on integer" ]] &&  TestaaOnkoLukuEtumerkillinenInteger $LukuPilkunEdessa
[[ $tulos = "luku on integer" ]] &&  TestaaOnkoLukuEtumerkitonInteger $LukuPilkunPerassa
[[ $tulos = "luku on integer" ]] && echo "luku on reaaliluku" || echo "luku ei ole reaaliluku"

